package com.diamond.service.impl;

import com.diamond.mapper.ProductInfoMapper;
import com.diamond.pojo.ProductInfo;
import com.diamond.pojo.ProductInfoExample;
import com.diamond.pojo.vo.ProductInfoVo;
import com.diamond.service.ProductInfoService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductInfoServiceImpl implements ProductInfoService {

    @Autowired
    ProductInfoMapper productInfoMapper;

    /**
     * 查询所有的商品信息（未分页）
     * @return
     */
    @Override
    public List<ProductInfo> getAll() {
        return productInfoMapper.selectByExample(new ProductInfoExample());
    }

    /**
     * 做分页处理
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public PageInfo<ProductInfo> splitPage(int pageNum, int pageSize) {
        //1.使用分页插件完成分页设置
        /*
            PageHelper方法使用了静态的ThreadLocal参数，分页参数和线程是绑定的。
            内部流程是ThreadLocal中设置了分页参数（pageIndex，pageSize），
            之后在查询执行的时候，获取当线程中的分页参数，
            执行查询的时候通过拦截器在sql语句中添加分页参数，之后实现分页查询，
            查询结束后在 finally 语句中清除ThreadLocal中的查询参数
         */
        PageHelper.startPage(pageNum,pageSize);
        //2.查询所有商品等待PageHelper通过拦截器在sql语句中添加分页参数
        //降序排列是为了增加或删除商品再查看时不用一直翻到最后一页
        ProductInfoExample example = new ProductInfoExample();
        example.setOrderByClause("p_id desc");
        List<ProductInfo> productInfos = productInfoMapper.selectByExample(example);
        //3.封装进PageInfo进行分页参数的相关计算
        PageInfo<ProductInfo> pageInfo = new PageInfo<>(productInfos);
        return pageInfo;
    }

    /**
     * 数据保存至数据库
     * @param info
     * @return
     */
    @Override
    public int save(ProductInfo info) {

        return productInfoMapper.insert(info);
    }

    /**
     * 根据ic查询单个商品信息
     * @param pid
     * @return
     */
    @Override
    public ProductInfo getById(Integer pid) {
        return productInfoMapper.selectByPrimaryKey(pid);
    }

    /**
     * 根据id更新商品信息
     * @param info
     * @return
     */
    @Override
    public int update(ProductInfo info) {
        return productInfoMapper.updateByPrimaryKey(info);
    }

    /**
     * 根据id删除商品信息
     * @param pid
     * @return
     */
    @Override
    public int delete(Integer pid) {
        return productInfoMapper.deleteByPrimaryKey(pid);
    }

    /**
     * 根据多个id批量删除商品
     * @param pids
     * @return
     */
    @Override
    public int deleteBarth(String[] pids) {
        return productInfoMapper.deleteBatch(pids);
    }

    /**
     * 多条件查询商品信息
     * @param vo
     * @return
     */
    @Override
    public List<ProductInfo> selectCondition(ProductInfoVo vo) {
        return productInfoMapper.selectCondition(vo);
    }

    /**
     * 多条件查询分页
     * @param pageSize
     * @param vo
     * @return
     */
    @Override
    public PageInfo<ProductInfo> splitPageCondition( ProductInfoVo vo, int pageSize) {
        PageHelper.startPage(vo.getPage(),pageSize);
        List<ProductInfo> productInfos = productInfoMapper.selectCondition(vo);
        return new PageInfo<>(productInfos);
    }
}
